home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / jaz_clib.arc / JZDIRLST.DMO < prev    next >
Text File  |  1989-04-09  |  3KB  |  120 lines

  1. /*
  2. ┌────────────────────────────────────────────────────────────────────────────┐
  3. │dirlst.c                                                                    │
  4. │Demo of directory routines                                                  │
  5. │                                                                            │
  6. │Usage: dirlst *.c                                                           │
  7. │                                                                            │
  8. │                                                                            │
  9. │ (C) JazSoft Software by Jack A. Zucker (301) 794-5950                      │
  10. └────────────────────────────────────────────────────────────────────────────┘
  11. */
  12.  
  13. #include "jzdirect.h"
  14. #include "jaz.h"
  15.  
  16. struct dir {
  17.   unsigned char attr;            /* file attribute */
  18.   struct tdirtime time;         /* creation time  */
  19.   struct tdirdate date;         /* creation date  */
  20.   long       size;            /* file size      */
  21.   char       name[13];            /* file name      */
  22. };
  23.  
  24. struct tree {
  25.   struct dir wdir;
  26.   struct tree *pleft,*prite;
  27. };
  28.  
  29. #define TREE struct tree
  30.  
  31. int wcount = 0;
  32.  
  33. main(argc,argv)
  34. int argc;
  35. char **argv;
  36. {
  37.   char wname[50];
  38.   TREE *whead,*insert();
  39.   int werr;
  40.   TDIR wlist;
  41.   TFAT wfat;
  42.  
  43.   if (argc != 2) strcpy(wname,"*.*");
  44.   else strcpy(wname,argv[1]);
  45.  
  46.   whead = 0;
  47.   werr = jzfndfst(wname,32,&wlist);
  48.   if (! werr) {
  49.     do {
  50.       whead = insert(whead,wlist);
  51.       werr = jzfndnxt(&wlist);
  52.     } while ( ! werr);
  53.     treeprint(whead);
  54.     jzdskfre(&wfat,0);
  55.     printf("\n%9d File(s) %9ld bytes free",wcount,wfat.free);
  56.     printf("\n%9s         %9ld bytes used","",wfat.used);
  57.     printf("\n%9s         %9ld total space","",wfat.total);
  58.   }
  59.   else printf("\nNo match for %s",argv[1]);
  60. }
  61.  
  62.  
  63.  
  64. TREE *insert(fptr,fdir)
  65. TREE *fptr;
  66. TDIR fdir;
  67. {
  68.   if (fptr == 0) {    /* install new wdir name */
  69.     fptr = (TREE *) malloc(sizeof(TREE));
  70.     strcpy(fptr->wdir.name,fdir.name);
  71.     fptr->wdir.attr = fdir.attr;
  72.     fptr->wdir.time = fdir.time;
  73.     fptr->wdir.date = fdir.date;
  74.     fptr->wdir.size = fdir.size;
  75.     fptr->pleft = fptr->prite = 0;
  76.   }
  77.   else
  78.     if (strcmp(fptr->wdir.name,fdir.name) > 0)
  79.       fptr->pleft = insert(fptr->pleft,fdir);
  80.     else
  81.       fptr->prite = insert(fptr->prite,fdir);
  82.   return(fptr);
  83. }
  84.  
  85. static int c_ampm[] = { 'a','p' };
  86. treeprint(p)
  87. TREE *p;
  88. {
  89.   char wname[13],wext[4];
  90.   char whour,windex;
  91.   int wch;
  92.  
  93.   if (p) {
  94.     treeprint(p->pleft);
  95.     windex = p->wdir.time.hours > 12;
  96.     whour  = p->wdir.time.hours % 12;
  97.     if (! whour) whour = 12;
  98.     if (++wcount % 24 == 0) {
  99.       printf("\nHit <ENTER> to continue...");
  100.       do ; while ((wch = getch() != '\r'));
  101.     }
  102.  
  103.     if (strchr(p->wdir.name,'.')) {
  104.       jzgetpce(p->wdir.name,wname,'.',1);
  105.       jzgetpce(p->wdir.name,wext,'.',2);
  106.     }
  107.     else {
  108.       strcpy(wname,p->wdir.name);
  109.       *wext = 0;
  110.     }
  111.     sprintf(p->wdir.name,"%-8s %-3s",wname,wext);
  112.  
  113.     printf("\n%-12s  %7ld  %2d-%02d-%02d  %2d:%02d%c",
  114.        p->wdir.name,p->wdir.size,
  115.        p->wdir.date.month,p->wdir.date.day,p->wdir.date.year,
  116.        whour,p->wdir.time.mins,c_ampm[windex]);
  117.     treeprint(p->prite);
  118.   }
  119. }
  120.